O PHP posusi a função mail, porém ela é simples demais, e só é possível usar SMTP local. Ou seja, pra testar em localhost, você precisa instalar e configurar (muito bem) um servidor SMTP. E isso dá muito trabalho.
Outro lado negativo da função mail
é a necessidade de definir manualmente todos os cabeçalhos da mensagem. E eles devem ser preenchidos perfeitamente, pois eles são usados por servidores de emails como principal forma de identificação de spam. Mensagens com cabeçalhos fracos e incompletos têm alta probabilidade de serem consideradas spam.
Para facilitar o envio de e-mails, foi criada a classe PHPMailer, que possui excelente configuração de cabeçalhos, além de facilitar tarefas meio chatas, como anexar arquivos nas mensagens.
NOTA: este artigo aborda a antiga versão 5 do PHPMailer. Em agosto de 2017, foi lançada a nova versão 6. Para aprender a usá-la, veja este meu artigo atualizado.
Como Usar o PHPMailer
A classe PHPMailer pode ser baixada em seu site oficial, pelo Composer (o Composer é simplesmente fantástico, não é?) ou clonando seu repositório oficial no Github.
Eu, sem sombra de dúvidas, recomendo usar o Composer. Ele é extremamente prático. Se você ainda não usa o Composer, está esperando o quê?! Aprenda de uma vez por todas!
O pacote baixado terá, dentre outros arquivos e diretórios, os arquivos class.phpmailer.php
, class.smtp.php
e o PHPMailerAutoload.php
.
O primeiro contém a classe PHPMailer
, que instanciaremos para o envio da mensagem; o segundo contém a classe para envio de email por SMTP. O terceiro é quem faz a “mágica” de incluir os outros dois. Ou seja, basta incluir o arquivo PHPMailerAutoload.php
e tudo deve funcionar normalmente.
É bom ressaltar que o arquivo PHPMailerAutoload.php
foi criado em versões mais recentes do PHPMailer. Antes de ele existir, nós incluíamos o class.phpmailer.php
apenas. Mas agora é preferível fazer a inclusão apenas do autoloder, que tomará conta da inclusão dos demais arquivos necessários.
Vou postar um exemplo simples, com comentário nas principais instruções. Usarei o SMTP do GMail, mas pode ser usado qualquer outro SMTP. Notem que o GMail usa SSL e porta diferente da padrão do SMTP (25).
Baixando o PHPMailer Pelo Composer
O Composer é a ferramenta perfeita para gerenciarmos dependências. Por isso recomendo usá-lo, sem pensar duas vezes.
Com o Composer instalado, basta este comando para baixar o PHPMailer:
composer require phpmailer/phpmailer
Só um detalhe importante…
O pessoal do PHPMailer anda meio preguiçoso sem tempo e não implementaram o autoloder do jeito certo para o Composer.
Explico.
Normalmente, basta incluirmos o autoloader do Composer e todas as dependências estarão disponíveis, usando o namespace correspondente.
O PHPMailer não usa namespace… :(
Mas não tem problema. Basta incluir o arquivo vendor/phpmailer/phpmailer/PHPMailerAutoload.php
e está tudo resolvido.
Baixando o PHPMailer Pelo Github
Se você realmente não quiser usar o Composer (tem gente que tem medo, sei lá por que…), vou mostrar como clonar o repositório usando o Git.
git clone https://github.com/PHPMailer/PHPMailer.git
Simples assim. Isso vai baixar o diretório “PHPMailer”. Os arquivos estarão todos lá.
Script Para Envio de Email com PHPMailer
Vamos à parte que interessa.
Abaixo o script, devidamente comentado, para envio de mensagens pelo PHPMailer.
Note que o começo, na parte do require
, vai mudar conforme a maneira que você baixou o PHPMailer.
// Use este require se você usou o Composer require 'vendor/phpmailer/phpmailer/PHPMailerAutoload.php'; // Use este require se você usou o Git require 'PHPMailer/PHPMailerAutoload.php'; $Mailer = new PHPMailer(); // define que será usado SMTP $Mailer->IsSMTP(); // envia email HTML $Mailer->isHTML(true); // codificação UTF-8, a codificação mais usada recentemente $Mailer->Charset = 'UTF-8'; // Configurações do SMTP $Mailer->SMTPAuth = true; $Mailer->SMTPSecure = 'ssl'; $Mailer->Host = 'smtp.gmail.com'; $Mailer->Port = 465; $Mailer->Username = 'seu_login'; $Mailer->Password = 'sua_senha'; // E-Mail do remetente (deve ser o mesmo de quem fez a autenticação // nesse caso [email protected]) $Mailer->From = '[email protected]'; // Nome do remetente $Mailer->FromName = 'Seu Nome'; // assunto da mensagem $Mailer->Subject = 'Teste'; // corpo da mensagem $Mailer->Body = 'Mensagem em HTML'; // corpo da mensagem em modo texto $Mailer->AltBody = 'Mensagem em texto'; // adiciona destinatário (pode ser chamado inúmeras vezes) $Mailer->AddAddress('[email protected]'); // adiciona um anexo $Mailer->AddAttachment('arquivo.pdf'); // verifica se enviou corretamente if ($Mailer->Send()) { echo "Enviado com sucesso"; } else { echo 'Erro do PHPMailer: ' . $Mailer->ErrorInfo; }
É muito fácil mexer com o PHPMailer. Até anexar um arquivo é simples! :)
Além do PHPMaielr, há outras ferramentas fundamentais para programadores PHP. No meu Guia Gratuito de 15 Ferramentas Fundamentais Para Programadores PHP, mostro outras 14 ferramentas, além do PHPMailer, que vão facilitar MUITO a sua vida, dando muito mais PRODUTIVIDADE para você. Clique aqui e baixe o Guia 100% Gratuito.
Essa e inúmeras outras dicas e técnicas eu abordo com mais detalhes no meu Curso ULTIMATE PHP. Estude PHP desde o básico, de forma 100% prática. Aprenda como se tornar um excelente programador, reconhecido e valorizado. Clique Aqui e Conheça o Curso Agora Mesmo!
Atualizando para o PHPMailer 6
O PHPMailer 6 foi lançado no final de agosto de 2017, trazendo inúmeras novidades e melhorias em relação à versão 5.
Caso você já utilize o PHPMailer 5, você não precisa mudar completamente seus scripts. Existe uma forma simples de atualizar para a versão 6.
Basta mudar a versão do pacote no composer.json
e modificar a maneira como instanciamos a classe PHPMailer
, seguindo o novo padrão.
Eu escrevi um guia gratuito passo-a-passo onde mostro exatamente como fazer a migração de forma simples e rápida.
Também mostro mais detalhes sobre o PHPMailer 6, explicando as principais mudanças e detalhando melhor o código.
Clique aqui e baixe gratuitamente o meu guia sobre o novo PHPMailer 6
Roberto Beraldo
Latest posts by Roberto Beraldo (see all)
- Não Tenha Preguiça de Ler! - 25/04/2016
- Como Atualizar Scripts PHP de MySQL Para MySQLi - 29/10/2015
- Como usar PDO com banco de dados MySQL - 10/09/2015